import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:get/get.dart';
import 'payment_service_interface.dart';
import 'alipay_service_real.dart';
import 'alipay_service_mock.dart';

/// 支付宝支付服务工厂
class AlipayService extends GetxService {
  static AlipayService get to => Get.find();
  
  PaymentServiceInterface? _paymentService;
  bool _isInitialized = false;

  /// 判断是否为iOS模拟器
  bool get isIOSSimulator {
    if (!kDebugMode) return false; // 生产环境不使用模拟模式
    if (Platform.isIOS) {
      // 通过环境变量判断是否为模拟器
      return Platform.environment['SIMULATOR_DEVICE_NAME'] != null;
    }
    return false;
  }

  /// 初始化支付宝SDK
  Future<void> init() async {
    // 避免重复初始化
    if (_isInitialized) {
      debugPrint('⚠️ AlipayService 已经初始化，跳过重复初始化');
      return;
    }
    
    try {
      // 根据平台选择合适的实现
      if (isIOSSimulator) {
        debugPrint('✅ iOS模拟器环境，使用Mock支付服务');
        _paymentService = AlipayServiceMock();
      } else {
        debugPrint('✅ 真实设备环境，使用真实支付服务');
        _paymentService = AlipayServiceReal();
      }
      
      await _paymentService!.init();
      _isInitialized = true;
      debugPrint('✅ AlipayService 初始化完成');
    } catch (e) {
      debugPrint('💥 支付服务初始化失败: $e');
      // 如果是iOS模拟器上的链接错误，降级到Mock服务
      if (isIOSSimulator || e.toString().contains('linking')) {
        debugPrint('🔄 降级到Mock支付服务');
        _paymentService = AlipayServiceMock();
        await _paymentService!.init();
        _isInitialized = true;
        debugPrint('✅ AlipayService 初始化完成（Mock模式）');
      } else {
        rethrow;
      }
    }
  }

  /// 发起支付宝支付
  /// [orderString] 后端返回的支付宝订单字符串
  /// 返回支付结果
  Future<Map<String, dynamic>?> pay(String orderString) async {
    if (_paymentService == null) {
      debugPrint('❌ AlipayService 未初始化，自动初始化中...');
      await init();
    }
    return await _paymentService!.pay(orderString);
  }

  /// 检查是否安装了支付宝
  Future<bool> isInstalled() async {
    if (_paymentService == null) {
      debugPrint('❌ AlipayService 未初始化，自动初始化中...');
      await init();
    }
    return await _paymentService!.isInstalled();
  }

  @override
  void onInit() {
    super.onInit();
    init();
  }
}

